/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Dao;

import BackEnd.Exceptions.*;
import com.mysql.jdbc.*;
import java.sql.SQLException;
import java.sql.Types;
import java.util.logging.*;

/**
 *
 * @author Ivan
 */
public class OcupacionDao extends DaoBase{

    @Override
    public ValueObjectBase create(ValueObjectBase value) throws CreateRegisterException {
        if(value.getClass()==OcupacionValueObject.class)
        {
            OcupacionValueObject vo=(OcupacionValueObject)value;
            try {
            Connection con=super.getConection("dlc");           
            String sentencia="call pa_registrarOcupacion(?,?)";
            java.sql.CallableStatement wcall=con.prepareCall(sentencia);
            wcall.setString(1, vo.getNombre());
            wcall.setString(2, "@a");
            wcall.registerOutParameter(2, Types.INTEGER);
            wcall.execute();
            vo.setId(wcall.getInt(2));
            wcall.close();
            con.close();
        } catch (SQLException ex) {            
            throw new CreateRegisterException();
        }
             return vo;
        }
        else
            throw new CreateRegisterException();
    }

    @Override
    public void update(ValueObjectBase value) throws UpdateRegisterException {
        if(value.getClass()==OcupacionValueObject.class)
        {
            OcupacionValueObject vo=(OcupacionValueObject)value;
            try {
                Connection con = super.getConection("dlc");
                String sentencia="call pa_updateOcupacion(?,?)";
                java.sql.CallableStatement wcall=con.prepareCall(sentencia);
                wcall.setInt(1, vo.getId());
                wcall.setString(2, vo.getNombre());
                wcall.execute();
                wcall.close();
                con.close();
                } catch (SQLException ex) {
                throw new UpdateRegisterException();
                }
        }
        else
            throw new UpdateRegisterException();

    }

    @Override
    public ValueObjectBase retrive(PkBase pk) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void delete(PkBase pk) throws DeleteRegisterException {
        if(pk.getClass()==PkId.class)
        {
            PkId id=(PkId)pk;
            Connection con;
            try {
                con = super.getConection("dlc");
                String sentencia="call pa_borrarOcupacion(?)";
                java.sql.CallableStatement wcall=con.prepareCall(sentencia);
                wcall.setInt(1, id.getId());
                wcall.execute();
                wcall.close();
                con.close();
             } catch (SQLException ex) {
                throw new DeleteRegisterException();
            }
        }
        else
            throw new DeleteRegisterException();
    }


    @Override
    public ValueObjectBase[] listarTodos() throws NotExistRegisterException {
        return this.mostrarConsulta("select * from ocupacion");
    }

    @Override
    public ValueObjectBase[] mostrarConsulta(String consulta) throws NotExistRegisterException {
        OcupacionValueObject[] vec=null;
            try {
                Connection con = super.getConection("dlc");
                Statement st=(Statement)con.createStatement();
                st.execute(consulta);
                ResultSet res=(ResultSet) st.getResultSet();
                res.last();
                vec = new OcupacionValueObject[res.getRow()];
                res.first();
                vec[0]=this.leerVo(res);
                while(res.next())
                {
                    vec[res.getRow()-1]=this.leerVo(res);
                }
                res.close();
                con.close();

            } catch (SQLException ex) {
                throw new NotExistRegisterException();
            }
        return vec;
    }

    @Override
    public ValueObjectBase traer(PkBase pk) throws NotExistRegisterException {
        PkId id=(PkId)pk;
        if(id.getClass() == PkId.class)
        {
            OcupacionValueObject vo = new OcupacionValueObject();
            try {
                Connection con = super.getConection("dlc");
                String sentencia = "select * from ocupacion where id="+id.getId();
                Statement st=(Statement)con.createStatement();
                st.execute(sentencia);
                ResultSet res=(ResultSet) st.getResultSet();
                res.next();
                vo=this.leerVo(res);
                res.close();
                con.close();

            } catch (SQLException ex) {
                throw new NotExistRegisterException();
            }

            return vo;
        }
        else
            return null;
    }
    

    private OcupacionValueObject leerVo(ResultSet res) throws SQLException
    {
        OcupacionValueObject vo=new OcupacionValueObject();
        vo.setId(res.getInt("id"));
        vo.setNombre(res.getString("nombre"));
        return vo;
    }
}
